home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / tty.h < prev   
C/C++ Source or Header  |  1992-12-18  |  6KB  |  173 lines

  1. /*
  2.  * tty.h --
  3.  *
  4.  *    This file contains declarations of the facilities provided by
  5.  *    devTty.c for the rest of the dev module.  This consists of glue
  6.  *    that holds together a generic terminal driver (ttyDriver), a
  7.  *    device-specific interface to a serial line, and the generic
  8.  *    Sprite kernel-call procedures for terminal devices.
  9.  *
  10.  * Copyright 1989 Regents of the University of California
  11.  * Permission to use, copy, modify, and distribute this
  12.  * software and its documentation for any purpose and without
  13.  * fee is hereby granted, provided that the above copyright
  14.  * notice appear in all copies.  The University of California
  15.  * makes no representations about the suitability of this
  16.  * software for any purpose.  It is provided "as is" without
  17.  * express or implied warranty.
  18.  *
  19.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dev/tty.h,v 9.2 90/09/11 12:13:45 rab Exp $ SPRITE (Berkeley)
  20.  */
  21.  
  22. #ifndef _DEVTTY
  23. #define _DEVTTY
  24.  
  25. #ifndef _TD
  26. #include <td.h>
  27. #endif
  28. #ifndef _SYNC
  29. #include "sync.h"
  30. #endif
  31. #ifndef _FS
  32. #include "fs.h"
  33. #endif
  34.  
  35. /*
  36.  * For each terminal or terminal-like device supported by the kernel,
  37.  * there exists a record with the following structure.  The structure
  38.  * (and the code in devTty.c) is complicated by the fact that the Td
  39.  * library calls malloc, which means that some of its procedures can't
  40.  * be invoked by interrupt handlers (or with interrupts disabled).  To
  41.  * get around this problem, devTty.c introduces an extra level of buffering
  42.  * between the interrupt handler and Td.  The Td structures are locked
  43.  * using a sleep lock, and are ONLY accessed from process level.  The extra
  44.  * buffers are handled without locks by using pointers carefully.  Transfers
  45.  * between the Td buffers and the DevTty buffers are made only by procedures
  46.  * running at process level.
  47.  */
  48.  
  49. #define TTY_IN_BUF_SIZE 100
  50. #define TTY_OUT_BUF_SIZE 10
  51.  
  52. typedef struct DevTty {
  53.     /*
  54.      * Intermediate buffers for terminal.  Note that the input buffer
  55.      * contains int's, not chars, in order to allow for the special
  56.      * non-ASCII values defined below, such as DEV_TTY_BREAK.  Both buffers
  57.      * use circular pointers.
  58.      */
  59.  
  60.     volatile int inBuffer[TTY_IN_BUF_SIZE];
  61.     volatile int insertInput;        /* Index at which to place next value
  62.                      * in inBuffer. */
  63.     volatile int extractInput;        /* Index at which to remove next value
  64.                      * from inBuffer.  If insert ==
  65.                      * extract, buffer is empty. */
  66.     volatile unsigned char outBuffer[TTY_OUT_BUF_SIZE];
  67.     volatile int insertOutput;        /* Index at which to place next byte
  68.                      * in outBuffer. */
  69.     volatile int extractOutput;        /* Index at which to remove next byte
  70.                      * from outputBuffer.  If insert ==
  71.                      * extract, buffer is empty. */
  72.  
  73.     /*
  74.      * Information used to communicate with the device-specific driver and
  75.      * other device-specific parameterization.  This information is filled
  76.      * in by the machine-specific initialization procedure DevTtyAttach.
  77.      */
  78.  
  79.     int (*rawProc) _ARGS_ ((void *clientDataPtr, int operation, int inBufSize,
  80.     char *inBuffer, int outBufSize, char *outBuffer));
  81.                                         /* Used as "rawProc" for the
  82.                      * terminal by Td library. */
  83.     void (*activateProc) _ARGS_((void *clientDataPtr));
  84.                                         /* Called to activate terminal
  85.                      * (initialize, enable interrupts,
  86.                      * etc.) after initialization is
  87.                      * complete. */
  88.     ClientData rawData;            /* Arbitrary value associated with
  89.                      * the device driver;  passed to
  90.                      * rawProc by Td library. */
  91.     void (*inputProc) _ARGS_ ((ClientData data, int value));
  92.                                         /* For most terminal-like devices
  93.                      * this is NIL.  If non-NIL, it
  94.                      * is a procedure to invoke to process
  95.                      * each input character (e.g. to map
  96.                      * keystroke identifiers to ASCII
  97.                      * characters). */
  98.     ClientData inputData;        /* Arbitrary value to pass to
  99.                      * inputProc. */
  100.     int consoleFlags;            /* Used to manage console device;
  101.                      * see below for definitions. */
  102.  
  103.     /*
  104.      * Information about the terminal and how to hook its cooked side up
  105.      * to Sprite kernel calls.
  106.      */
  107.  
  108.     Td_Terminal term;            /* Token returned by Td_Create. */
  109.     int selectState;            /* Current select state for terminal:
  110.                      * OR'ed combination of FS_READABLE,
  111.                      * FS_WRITABLE, and FS_EXCEPTION. */
  112.     Fs_NotifyToken notifyToken;        /* Token identifying device;  used to
  113.                      * notify Fs when terminal becomes
  114.                      * readable or writable. */
  115.     int openCount;            /* Number of active opens of
  116.                      * terminal. */
  117. } DevTty;
  118.  
  119. /*
  120.  * Definitions for consoleFlags bits:
  121.  *
  122.  * DEV_TTY_IS_CONSOLE:    1 means this terminal is the console, so handle
  123.  *            special console commands like L1-A.
  124.  * DEV_TTY_GOT_BREAK:    For consoles that are just serial lines, this bit
  125.  *            means a break was just received on input, so the
  126.  *            next character is a console command.
  127.  * DEV_TTY_OVERFLOWED:    The input buffer overflowed and a message has been
  128.  *            printed.  
  129.  */
  130.  
  131. #define DEV_TTY_IS_CONSOLE    1
  132. #define DEV_TTY_GOT_BREAK    2
  133. #define DEV_TTY_OVERFLOWED    4
  134.  
  135. /*
  136.  * Special values for "characters" placed in the buffer of a DevTty:
  137.  *
  138.  * DEV_TTY_BREAK:    A break condition just occurred on the device.
  139.  * DEV_TTY_HANGUP:    The terminal just got hung up.
  140.  */
  141.  
  142. #define DEV_TTY_BREAK    1000
  143. #define DEV_TTY_HANGUP    1001
  144.  
  145. #define DEV_TTY_IS_CONTROL(x) ((x) & ~0xff)
  146.  
  147. /*
  148.  * Variables exported by devTty.c:
  149.  */
  150.  
  151. extern Sync_Lock    devTtyLock;
  152.  
  153. /*
  154.  * Procedures exported by devTty.c:
  155.  */
  156.  
  157. extern ReturnStatus DevTtyClose _ARGS_((Fs_Device *devicePtr, int useFlags,
  158.     int openCount, int writerCount));
  159. extern void DevTtyInputChar _ARGS_((DevTty *ttyPtr, int value));
  160. extern int DevTtyOutputChar _ARGS_((DevTty *ttyPtr));
  161. extern ReturnStatus DevTtyIOControl _ARGS_((Fs_Device *devicePtr,
  162.     Fs_IOCParam *iocPtr, Fs_IOReply *replyPtr));
  163. extern ReturnStatus DevTtyOpen _ARGS_((Fs_Device *devicePtr, int useFlags,
  164.     Fs_NotifyToken notifyToken, int *flagsPtr));
  165. extern ReturnStatus DevTtyRead _ARGS_((Fs_Device *devicePtr,
  166.     Fs_IOParam *readPtr, Fs_IOReply *replyPtr));
  167. extern ReturnStatus DevTtyWrite _ARGS_((Fs_Device *devicePtr,
  168.     Fs_IOParam *writePtr, Fs_IOReply *replyPtr));
  169. extern ReturnStatus DevTtySelect _ARGS_((Fs_Device *devicePtr, int *readPtr,
  170.     int *writePtr, int *exceptPtr));
  171.  
  172. #endif /* _DEVTTY */
  173.